//
// Created by zhku666 on 25-2-26
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "lock.cpp"

// 函数：读取文件内容并解析
void read_and_update_file(const char *filename) {
    FILE *file = fopen(filename, "r");
    if (file == NULL) {
        perror("无法打开文件");
        return;
    }

    // 临时文件，用于存储更新后的数据
    FILE *temp_file = fopen("temp_sensor.txt", "w");
    if (temp_file == NULL) {
        perror("无法创建临时文件");
        fclose(file);
        return;
    }

    char line[100];
    while (fgets(line, sizeof(line), file)){
        char sensor_id[20], cow_id[20];
        double longitude, latitude;

        // 解析每一行数据
        if (sscanf(line, "%[^-]-%[^-]-%lf-%lf", sensor_id, cow_id, &longitude, &latitude) == 4) {
            double random_longitude = (rand() % 21) - 10; // -10 到 10 的随机数
            double random_latitude = (rand() % 21) - 10;  // -10 到 10 的随机数

            longitude += random_longitude;
            latitude += random_latitude;

            // 打印更新后的信息
            printf("传感器ID: %s, 牛ID: %s, 经度: %.0f, 纬度: %.0f\n", sensor_id, cow_id, longitude, latitude);

            // 将更新后的数据写入临时文件
            fprintf(temp_file, "%s-%s-%.0f-%.0f\n", sensor_id, cow_id, longitude, latitude);
        } else {
            fprintf(stderr, "文件格式错误: %s", line);
        }
    }

    fclose(file);
    fclose(temp_file);

    // 用临时文件替换原文件
    remove(filename);
    rename("temp_sensor.txt", filename);
}

void start_update()
{
    const char *filename = "sensor.txt";
    double update_time;

    printf("请输入更新数据的时间间隔：\n");
    scanf_s("%lf", &update_time);

    while (true) {

        // 清空命令行,生成随机数并更新经纬度
        system("cls");
        srand(time(NULL));

        //加锁，读取并更新文件内容
        get_lock();
        read_and_update_file(filename);
        unlock();

        // 等待几秒后更新
        sleep(update_time);
    }
}